package com.shujia.service;

import com.shujia.bean.Weibo;
import com.shujia.dao.WeiboDao;
import com.shujia.util.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;


/**
 * 再业务层的类上增加@Service注解，spring会自动拆功能键这个类的对象
 * 单例模式：这类只有一个对象
 */

@Service
public class WeiboService {

    public WeiboService() {
        System.out.println("WeiboService的镀锡被创建了");
    }


    @Autowired
    private WeiboDao weiboDao ;

    public Weibo queryWeiboById(Integer id) {


        //1、先查询缓存，如果缓存中有，直接返回并更新过期时间


        String key = "weibo:" + id;

        Jedis jedis = null;
        try {
            jedis = RedisUtil.getConnection();

            String text = jedis.get(key);

            //倮缓存中有直接返回
            if (text != null) {
                Weibo weibo = new Weibo();
                weibo.setId(id);
                weibo.setText(text);

                //更新过期时间
                jedis.expire(key, 10);

                System.out.println("缓存中有数据，直接返回");

                return weibo;
            }
        } catch (Exception e) {
            System.out.println("查询缓存失败");
        } finally {
            if (jedis != null)
                //放回连接池
                jedis.close();
        }


        //缓存中没有再查询数据
        Weibo weibo = weiboDao.queryWeiboById(id);


        //将查询到的数据保存到缓存中
        try {
            jedis = RedisUtil.getConnection();

            jedis.set(key, weibo.getText());

            //设置过期时间
            jedis.expire(key, 10);

        } catch (Exception e) {
            System.out.println("插入数据失败");
        } finally {
            if (jedis != null)
                //放回连接池
                jedis.close();
        }


        return weibo;
    }
}
